feat(spec)!: ADR-0049 enforce-or-remove —— ui/widget + ui/i18n 家族 13 退 1 留 (#5055) - #6385
Merged
Merged
Conversation
…ularies, keep FieldWidgetProps (#5055) ADR-0049 enforce-or-remove for the 14 sites #4001 批 16 measured as `no door`. Disposed per site against a re-measurement on origin/main: 13 REMOVED, 1 KEPT. Removed — 10 defs, 26 exported names: ui/widget.zod.ts WidgetManifest, WidgetLifecycle, WidgetEvent, WidgetProperty, WidgetSource (npm/remote/inline union) ui/i18n.zod.ts I18nObject, PluralRule, NumberFormat, DateFormat, LocaleConfig None had a carrier key: nothing under packages/spec/src imported widget.zod at all, every live import of i18n.zod names I18nLabelSchema or AriaPropsSchema, the BFS from all 24 metadata-type roots plus defineStack reached none of them (with PageSchema / ObjectListViewSchema resolving `direct` in the same run and a synthetic carrier flipping all of them), and no repo ever parsed one. So a published vocabulary described a widget-registration and locale-formatting capability the platform does not have — the #3950 shape. Kept — FieldWidgetProps. Its evidence differs and had been overtaken one day before 批 16 measured. It is a React props contract, never authorable (absent from authorable-surface/ and json-schema.manifest/ — onChange is a z.function()), so having no parse is its design; and objectui PR #3289 (2026-08-03) renamed @object-ui/fields' validation slot onto its `error` with no alias and pinned it as a deliberate compile-time tripwire. Re-verified on objectui origin/main. Route 3 ("nothing parses it → neither"), as #4988 / #4834: no retiredKey() tombstone and no D2 conversion, because there is no shape to tombstone and no source to rewrite. The declared record is the D3 SemanticMigration ui-widget-i18n-family-retired plus 10 RETIRED_DEFS_BY_MAJOR entries, which the #4725 manifest-deletion gate reads. WidgetManifest.performance's own tombstone (#3896) is subsumed by the removal of the shape that carried it. Baselines moved deliberately: json-schema.manifest/ui.json -10 (the #2978 ratchet fires first), authorable-surface/ui.json -65 (adjudicated by the #4650 gate's path 3), api-surface/ui.json -26. variant-docs.json's `type:inline|npm|remote` entry goes with the union it described (#5552's failure mode). Reference docs, meta.json, skill indexes and the strictness-ledger counts regenerated; the `no door` bucket goes 14 -> 1. Pins are bidirectional: ui/widget-i18n-retirement.test.ts asserts absence across every public entry by resolved symbol identity AND the survival of the three shapes a too-wide sweep would take — FieldWidgetProps, AriaProps and I18nLabel, all three of which live in the two files being emptied. The #5056 clone-overlap fixture is rebuilt locally so the instrument's measured 2-of-19 bound survives its subject. No runtime behaviour changes; that impossibility is the reason for the removal. Refs #5055, #4001, #4988, ADR-0049, ADR-0087 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XUAV11R31jhzq6v1wb6SuJ
…get-i18n-enforce-or-remove
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
Absorbs #5775 / #6146 / #6245 and the rest of main (63 commits), which share packages/spec's sharded artifacts with this branch. Conflicts resolved: - content/docs/references/ui/widget.mdx (modify/delete) — deleted. It is a generated page and its five defs are gone, so gen:docs no longer emits it; main had only re-rendered it from the pre-retirement source. - packages/spec/src/migrations/registry.ts — both sides APPEND a paragraph to the protocol-17 step's rationale. Kept both, #5775's last, with the paragraph break restored between them. RETIRED_DEFS_BY_MAJOR and the ui-widget-i18n-family-retired SemanticMigration merged intact. - packages/spec/src/type-alias-convention.pin.test.ts — kept #5775's new M170 (ui/component.zod) import and its Iso719 PageContainerProps pin; dropped the M168 (ui/widget.zod) import and the Iso716 WidgetLifecycleSchema pin, whose schema this branch retires. Self-count re-measured from the source: 720 -> 716 (main's +1 for PageContainerProps, this branch's -4 for the retired schemas), and the note now says both moves are in the one number. - docs/audits/2026-07-unknown-key-strictness-ledger.md — kept this branch's deletion of the i18n.zod.ts row from the remaining-strip table. Its five strip sites were removed, so the file reaches 0 strip and leaves that table; main had simply not seen the retirement yet. Generated artifacts were NOT text-merged. Rebuilt from the merged tree and regenerated via check:generated --fix (spec-changes.json, docs/protocol-upgrade-guide.md, api-surface/, content/docs/references/**, the strictness-ledger counts). Verified on the merged tree: spec suite 339 files / 8624 tests green; check:generated 10/10 up to date; the six no-generator source audits green as a group (check:liveness, check:empty-state, check:skill-examples, check:variant-docs, check:exported-any, check:dual-source-exports); pnpm typecheck 125/125. Branch delta vs origin/main on api-surface is still exactly 26 removed / 0 added. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XUAV11R31jhzq6v1wb6SuJ
Contributor
📓 Docs Drift CheckThis PR changes 1 package(s): 112 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:
|
…ement (#6148) The new #6148 gate requires every changeset that declares a breaking change to answer the ledger question in writing. This one's answer is the first of the four accepted forms — the entry exists: the retirement is registered as the D3 SemanticMigration `ui-widget-i18n-family-retired` in packages/spec/src/migrations/registry.ts, alongside its ten RETIRED_DEFS_BY_MAJOR entries. Comment-only; no schema, artifact or test is affected. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XUAV11R31jhzq6v1wb6SuJ
qq9340100
marked this pull request as ready for review
August 7, 2026 17:39
This was referenced Aug 7, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #5055
逐站点判读后 13 退役 / 1 保留(10 def / 26 导出名):widget.zod.ts 的 WidgetManifest/Lifecycle/Event/Property/Source(3 分支)+ i18n.zod.ts 的 I18nObject/PluralRule/NumberFormat/DateFormat/LocaleConfig。FieldWidgetProps 翻 KEEP——派发时点名的 objectui PR #3289 证据更新实测证实(spec-symbol-batch7.test.ts 的有意 tripwire + 3 条类型 pin),且它是 React props 契约、强制点在消费仓 tsc,从不在 authorable-surface。走退役剧本 route 3(无载体键 ⇒ 无墓碑/无 conversion),登记 D3 SemanticMigration + 10 条 RETIRED_DEFS_BY_MAJOR;双向 pin(absence 走编译器 API 扫 exports map 带反真空守卫;survival 半边钉 FieldWidgetProps/AriaProps/I18nLabel/field.widget)。major changeset 含 FROM→TO 表。终报全文见 #5055(dev 自贴,14:04Z)。
落地序(采纳终报建议):本单先于 #6083 落(削 4 条同构 pin + 6 XParsed,基线 719→715 / 665→659,#6083 开工前重测);ui.json 分片与已合并的 #5775/#6146/#6245 有同 category 文本冲突 —— 新 head 同步中(已 poke dev 会话 merge main + 重生成,⛔ 不手改分片)。
维护者合并前确认项:cloud 仓本会话与 dev 会话均不可达,第三仓零消费的判据是批 16 索引搜索 0 命中(正对照 345 命中)+ 两可达仓 import 面实测为零 + 形状消费必先 import;若你有 cloud 访问,合并前补一次
WidgetManifest|LocaleConfig|PluralRulecode search 即闭环。配套:objectui 侧 #6275(parity 测试按设计打红 + 锚点注释指向已删名,dev 已立单)。
Generated by Claude Code